package leetcode_acm.stackAndQueue;

import java.util.ArrayDeque;
import java.util.Deque;
import java.util.LinkedList;
import java.util.Stack;

/**
 * 功能描述
 *
 * @author: 张庭杰
 * @date: 2023年03月22日 13:09
 */
public class MyQueue {
    private final LinkedList<Integer> in;
    private final LinkedList<Integer> out;

    public MyQueue() {
        in = new LinkedList<>();
        out = new LinkedList<>();
    }
    //栈的操作是先进后出,插入元素从表头加入,删除元素从表头删除
    //void push(int x) 将元素 x 推到队列的末尾
    public void push(int x) {
        //这个是要推到队列的末尾,于是我们先将in的元素存储到out中
        while(!in.isEmpty()){
            out.addFirst(in.removeFirst());
        }
        //然后在in中添加一个x的元素
        in.addFirst(x);
        //接着从之前out的元素全部搬回来
        while(!out.isEmpty()){
            in.addFirst(out.removeFirst());
        }
    }
    //int pop() 从队列的开头移除并返回元素
    public int pop() {
        //从队列的开头移除元素
        if(in.isEmpty()){
            return -1;
        }
        return in.removeFirst();
    }
    //int peek() 返回队列开头的元素
    public int peek() {
        return in.getFirst();
    }
    //boolean empty() 如果队列为空，返回 true ；否则，返回 false
    public boolean empty() {
        return in.isEmpty();
    }
}
